{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a783e52a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch_geometric"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eb494884",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import logging\n",
    "import time\n",
    "import sys\n",
    "import random\n",
    "import argparse\n",
    "import pickle\n",
    "from pathlib import Path\n",
    "import torchvision.transforms as transforms\n",
    "import torch\n",
    "import numpy as np\n",
    "from sklearn.metrics import average_precision_score, roc_auc_score\n",
    "from model.tgn import TGN\n",
    "#from mixup import shuffleData\n",
    "from utils.utils import EarlyStopMonitor, get_neighbor_finder, Net\n",
    "from utils.data_processing import compute_time_statistics, get_data_node_classification\n",
    "#from evaluation.evaluation import eval_node_classification, shuffleData"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c467227c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os.path as osp\n",
    "import os\n",
    "import argparse\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from torch_geometric.datasets import Planetoid, Coauthor\n",
    "from torch_geometric.data import Data\n",
    "from torch_geometric.utils import degree\n",
    "from torch_sparse import SparseTensor\n",
    "import torch_geometric.transforms as T\n",
    "\n",
    "import pdb\n",
    "import numpy as np\n",
    "import random\n",
    "import copy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8a808ae1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import copy\n",
    "import numpy as np\n",
    "import torch\n",
    "from sklearn.metrics import average_precision_score, roc_auc_score\n",
    "\n",
    "def idNode(data, id_new_value_old):\n",
    "    data = copy.deepcopy(data)\n",
    "    \n",
    "    data.x = None\n",
    "    data.y[data.val_id] = -1\n",
    "    \n",
    "    data.y[data.test_id] = -1\n",
    "    \n",
    "    data.y = data.y[id_new_value_old]\n",
    "\n",
    "    data.train_id = None\n",
    "    data.test_id = None\n",
    "    data.val_id = None\n",
    "\n",
    "    id_old_value_new = torch.zeros(id_new_value_old.shape[0], dtype = torch.long)\n",
    "    id_old_value_new[id_new_value_old] = torch.arange(0, id_new_value_old.shape[0], dtype = torch.long)\n",
    "    row = data.edge_idxs[0]\n",
    "    col = data.edge_idxs[1]\n",
    "    row = id_old_value_new[row]\n",
    "    col = id_old_value_new[col]\n",
    "    data.edge_idxs = torch.stack([row, col], dim=0)\n",
    "\n",
    "    return data\n",
    "\n",
    "def shuffleData(data):\n",
    "    data = copy.deepcopy(data)\n",
    "    \n",
    "    id_new_value_old = np.arange(data.shape[0])\n",
    "   \n",
    "    train_id_shuffle = copy.deepcopy(data.train_id)\n",
    "   \n",
    "    np.random.shuffle(train_id_shuffle)\n",
    "    \n",
    "    id_new_value_old[data.train_id] = train_id_shuffle\n",
    "    \n",
    "    data = idNode(data, id_new_value_old)\n",
    "   \n",
    "    return data, id_new_value_old\n",
    "\n",
    "\n",
    "def eval_edge_prediction(model, negative_edge_sampler, data, n_neighbors, batch_size=200):\n",
    "  # Ensures the random sampler uses a seed for evaluation (i.e. we sample always the same\n",
    "  # negatives for validation / test set)\n",
    "  assert negative_edge_sampler.seed is not None\n",
    "  negative_edge_sampler.reset_random_state()\n",
    "\n",
    "  val_ap, val_auc = [], []\n",
    "  with torch.no_grad():\n",
    "    model = model.eval()\n",
    "    # While usually the test batch size is as big as it fits in memory, here we keep it the same\n",
    "    # size as the training batch size, since it allows the memory to be updated more frequently,\n",
    "    # and later test batches to access information from interactions in previous test batches\n",
    "    # through the memory\n",
    "    TEST_BATCH_SIZE = batch_size\n",
    "    num_test_instance = len(data.sources)\n",
    "    num_test_batch = math.ceil(num_test_instance / TEST_BATCH_SIZE)\n",
    "\n",
    "    for k in range(num_test_batch):\n",
    "      s_idx = k * TEST_BATCH_SIZE\n",
    "      e_idx = min(num_test_instance, s_idx + TEST_BATCH_SIZE)\n",
    "      sources_batch = data.sources[s_idx:e_idx]\n",
    "      destinations_batch = data.destinations[s_idx:e_idx]\n",
    "      timestamps_batch = data.timestamps[s_idx:e_idx]\n",
    "      edge_idxs_batch = data.edge_idxs[s_idx: e_idx]\n",
    "\n",
    "      size = len(sources_batch)\n",
    "      _, negative_samples = negative_edge_sampler.sample(size)\n",
    "\n",
    "      pos_prob, neg_prob = model.compute_edge_probabilities(sources_batch, destinations_batch,\n",
    "                                                            negative_samples, timestamps_batch,\n",
    "                                                            edge_idxs_batch, n_neighbors)\n",
    "\n",
    "      pred_score = np.concatenate([(pos_prob).cpu().numpy(), (neg_prob).cpu().numpy()])\n",
    "      true_label = np.concatenate([np.ones(size), np.zeros(size)])\n",
    "\n",
    "      val_ap.append(average_precision_score(true_label, pred_score))\n",
    "      val_auc.append(roc_auc_score(true_label, pred_score))\n",
    "\n",
    "  return np.mean(val_ap), np.mean(val_auc)\n",
    "\n",
    "\n",
    "def eval_node_classification(tgn, decoder, data, edge_idxs, batch_size, n_neighbors):\n",
    "  pred_prob = np.zeros(len(data.sources))\n",
    "  num_instance = len(data.sources)\n",
    "  num_batch = math.ceil(num_instance / batch_size)\n",
    "\n",
    "  with torch.no_grad():\n",
    "    decoder.eval()\n",
    "    tgn.eval()\n",
    "    \n",
    "    s_idx =  0\n",
    "    e_idx = batch_size\n",
    "\n",
    "    sources_batch = data.sources[s_idx: e_idx]\n",
    "    destinations_batch = data.destinations[s_idx: e_idx]\n",
    "    timestamps_batch = data.timestamps[s_idx:e_idx]\n",
    "    edge_idxs_batch = edge_idxs[s_idx: e_idx]\n",
    "    labels_batch = data.labels[s_idx: e_idx]\n",
    "    source_embedding, destination_embedding, _ = tgn.compute_temporal_embeddings(sources_batch,\n",
    "                                                                                   destinations_batch,\n",
    "                                                                                   destinations_batch,\n",
    "                                                                                   timestamps_batch,\n",
    "                                                                                   edge_idxs_batch,\n",
    "                                                                                   n_neighbors)\n",
    "    \n",
    "    \n",
    "    \n",
    "    \n",
    "    ##################\n",
    "    node_id = np.arange(source_embedding.shape[0])\n",
    "    np.random.shuffle(node_id)\n",
    "    x = np.arange(batch_size ).reshape(2, int(batch_size/2))\n",
    "    source_embedding.edge_idxs = torch.tensor( x, dtype= torch.int64)\n",
    "    \n",
    "    source_embedding.train_id = node_id[:int(source_embedding.shape[0] * 0.6)]\n",
    "    source_embedding.val_id = node_id[int(source_embedding.shape[0] * 0.6):int(source_embedding.shape[0] * 0.8)]\n",
    "    source_embedding.test_id = node_id[int(source_embedding.shape[0] * 0.8):]\n",
    "    \n",
    "    source_embedding.y = torch.tensor( labels_batch , dtype= torch.int64)\n",
    "    data_b, id_new_value_old = shuffleData(source_embedding)\n",
    "        \n",
    "    lam = lam = np.random.beta(4.0, 4.0)\n",
    "    labels_batch_torch = torch.from_numpy(labels_batch).float()\n",
    "    pred_prob_batch = decoder(source_embedding, source_embedding.edge_idxs, data_b.edge_idxs, lam , id_new_value_old).sigmoid()\n",
    "    pred_prob_batch = torch.flatten(pred_prob_batch)\n",
    "    labels_batch_torch = torch.stack((1 - labels_batch_torch, labels_batch_torch), dim=-1)\n",
    "    labels_batch_torch = torch.flatten(labels_batch_torch) \n",
    "    #pred_prob[s_idx: e_idx] = pred_prob_batch[s_idx: e_idx] \n",
    "    #pred_prob[s_idx: e_idx] = pred_prob_batch.cpu().numpy()\n",
    "    print\n",
    "  auc_roc = roc_auc_score(labels_batch_torch, pred_prob_batch)   \n",
    "  return auc_roc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5c8907a6",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Namespace(aggregator='last', backprop_every=1, bs=1000, data='wikipedia', different_new_nodes=False, drop_out=0.1, embedding_module='graph_attention', gpu=0, lr=0.0003, memory_dim=172, memory_update_at_end=False, message_dim=100, message_function='identity', n_degree=10, n_epoch=50, n_head=2, n_layer=1, n_neg=1, n_runs=1, new_node=False, node_dim=100, patience=5, prefix='', randomize_features=False, time_dim=100, uniform=False, use_destination_embedding_in_message=False, use_memory=False, use_source_embedding_in_message=False, use_validation=False)\n",
      "DEBUG:root:Num of training instances: 133853\n",
      "DEBUG:root:Num of batches per epoch: 134\n",
      "INFO:root:Loading saved TGN model\n",
      "INFO:root:TGN models loaded\n",
      "INFO:root:Start training Mixup node classification task\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "AGX: agxa_device_template.hpp:3667:createUtilityProgramIfNeeded_block_invoke: *** Failed to compile Context Save Program\n",
      "AGX: agxa_device_template.hpp:3699:createUtilityProgramIfNeeded: *** Failed to create utility programs\n",
      "AGX: agxa_device_template.hpp:933:setupCompiler: *** Compiler setup failed.\n",
      "INFO:root:Epoch 0: train loss: 0.005909880150609941, val auc: 0.007861000000000003, time: 2.903541088104248\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 1: train loss: 0.005759787648471433, val auc: 0.1399385, time: 1.3719851970672607\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 2: train loss: 0.0056148914258871505, val auc: 0.549701, time: 1.3519630432128906\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 3: train loss: 0.005484049444767966, val auc: 0.8302775000000001, time: 1.3794059753417969\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 4: train loss: 0.005350045748610995, val auc: 0.940248, time: 1.4346439838409424\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 5: train loss: 0.005214299728621298, val auc: 0.98746, time: 1.458664894104004\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 6: train loss: 0.005083416380099396, val auc: 0.994833, time: 1.4370379447937012\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 7: train loss: 0.004943821412413868, val auc: 0.996335, time: 1.5132639408111572\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 8: train loss: 0.004806197401302964, val auc: 0.995497, time: 1.3875138759613037\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 9: train loss: 0.004649626674936779, val auc: 0.9960620000000001, time: 1.4503302574157715\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 10: train loss: 0.004477082793392352, val auc: 0.9969370000000001, time: 1.4528741836547852\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 11: train loss: 0.004355013815324698, val auc: 0.996156, time: 1.501514196395874\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 12: train loss: 0.00419624394445277, val auc: 0.9945999999999999, time: 1.450913667678833\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 13: train loss: 0.00404741603936722, val auc: 0.9959199999999999, time: 1.4270360469818115\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 14: train loss: 0.003917094042052084, val auc: 0.997163, time: 1.4447169303894043\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 15: train loss: 0.0037540184028113065, val auc: 0.995198, time: 1.4462971687316895\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 16: train loss: 0.0036331272836941392, val auc: 0.996097, time: 1.472747802734375\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 17: train loss: 0.0035373277183788927, val auc: 0.996634, time: 1.4530889987945557\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 18: train loss: 0.003436988859034296, val auc: 0.9953249999999999, time: 1.443547010421753\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 19: train loss: 0.003312102894284832, val auc: 0.9972390000000001, time: 1.446897029876709\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 20: train loss: 0.0032397577566887015, val auc: 0.99673, time: 1.4457368850708008\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 21: train loss: 0.0031845785343824927, val auc: 0.99555, time: 1.4556641578674316\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 22: train loss: 0.003149518103741888, val auc: 0.9957460000000001, time: 1.4861128330230713\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 23: train loss: 0.0030547184730643656, val auc: 0.996752, time: 1.441467046737671\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 24: train loss: 0.0030191209334046094, val auc: 0.996232, time: 1.428112268447876\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 25: train loss: 0.0029965623546002514, val auc: 0.996528, time: 1.4547200202941895\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 26: train loss: 0.002968912471586199, val auc: 0.996216, time: 1.4512460231781006\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 27: train loss: 0.0029583015103838337, val auc: 0.996042, time: 1.4649348258972168\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 28: train loss: 0.0029124025978259187, val auc: 0.997408, time: 1.4485208988189697\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 29: train loss: 0.0029370359965224762, val auc: 0.9959079999999999, time: 1.431797981262207\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 30: train loss: 0.0028836389086139736, val auc: 0.995102, time: 1.4452447891235352\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 31: train loss: 0.002937668072643565, val auc: 0.9990829999999999, time: 1.4360570907592773\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 32: train loss: 0.0028399242394006076, val auc: 0.9974745, time: 1.4523899555206299\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 33: train loss: 0.002832704515599493, val auc: 0.9963589999999999, time: 1.4954230785369873\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 34: train loss: 0.0029125887511381463, val auc: 0.996186, time: 1.4408791065216064\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 35: train loss: 0.002869848439942545, val auc: 0.996849, time: 1.4230279922485352\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 36: train loss: 0.0028525962313609337, val auc: 0.9971140000000001, time: 1.4410178661346436\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 37: train loss: 0.0028174566244011496, val auc: 0.996465, time: 1.4446442127227783\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 38: train loss: 0.002844481770672015, val auc: 0.9963879999999999, time: 1.459590196609497\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 39: train loss: 0.002845800412234975, val auc: 0.9963219999999999, time: 1.438561201095581\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 40: train loss: 0.0027758594769150464, val auc: 0.9969540000000001, time: 1.427718162536621\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 41: train loss: 0.0027919678545709867, val auc: 0.995224, time: 1.4512686729431152\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 42: train loss: 0.0028160514671411088, val auc: 0.996178, time: 1.4462981224060059\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 43: train loss: 0.0028055970793339742, val auc: 0.996201, time: 1.4504408836364746\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 44: train loss: 0.0028134626683904164, val auc: 0.996236, time: 1.47318696975708\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 45: train loss: 0.0028160007587119716, val auc: 0.995802, time: 1.4302620887756348\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 46: train loss: 0.0028136388134600513, val auc: 0.9962475, time: 1.45084810256958\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 47: train loss: 0.002764160063729357, val auc: 0.99659, time: 1.443183183670044\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 48: train loss: 0.002820990423658001, val auc: 0.9969060000000001, time: 1.4624841213226318\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n",
      "x0 tensor([[ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [ 0.0589, -0.1578, -0.0951,  ..., -0.1304, -0.1451,  0.0466],\n",
      "        [-1.5944, -0.6386,  2.0085,  ...,  1.0803, -1.0948, -1.8176],\n",
      "        ...,\n",
      "        [-0.4361,  0.5620,  0.7298,  ...,  0.5917,  0.5445, -0.5500],\n",
      "        [-0.8235,  0.9414, -0.7193,  ..., -0.9325, -0.3603,  0.1175],\n",
      "        [-0.4040,  1.3888,  0.5499,  ...,  0.0497,  0.8171, -0.4364]])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Epoch 49: train loss: 0.0027436487265487214, val auc: 0.9968699999999999, time: 1.4516983032226562\n",
      "INFO:root:test auc: 0.9968699999999999\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 tensor([[ 0.4841, -0.2917,  0.2971,  ..., -0.1626,  0.4045, -1.3818],\n",
      "        [-1.4846, -0.7929,  1.9624,  ...,  1.0984, -1.3608, -1.7760],\n",
      "        [-0.9607, -0.5685,  0.7030,  ...,  1.0721, -0.3784, -3.0068],\n",
      "        ...,\n",
      "        [-1.2337,  1.0333, -0.1442,  ..., -0.0954, -0.8840, -0.1149],\n",
      "        [-1.0625,  0.9924, -0.0975,  ...,  0.2466, -0.6715, -0.2413],\n",
      "        [-1.0148,  0.9701, -0.0765,  ...,  0.3027, -0.5989, -0.2478]])\n"
     ]
    }
   ],
   "source": [
    "random.seed(0)\n",
    "np.random.seed(0)\n",
    "torch.manual_seed(0)\n",
    "\n",
    "### Argument and global variables\n",
    "parser = argparse.ArgumentParser('TGN self-supervised training')\n",
    "parser.add_argument('-d', '--data', type=str, help='Dataset name (eg. wikipedia or reddit)',\n",
    "                    default='wikipedia')\n",
    "parser.add_argument('--bs', type=int, default=1000, help='Batch_size')\n",
    "parser.add_argument('--prefix', type=str, default='', help='Prefix to name the checkpoints')\n",
    "parser.add_argument('--n_degree', type=int, default=10, help='Number of neighbors to sample')\n",
    "parser.add_argument('--n_head', type=int, default=2, help='Number of heads used in attention layer')\n",
    "parser.add_argument('--n_epoch', type=int, default=50, help='Number of epochs')\n",
    "parser.add_argument('--n_layer', type=int, default=1, help='Number of network layers')\n",
    "parser.add_argument('--lr', type=float, default=3e-4, help='Learning rate')\n",
    "parser.add_argument('--patience', type=int, default=5, help='Patience for early stopping')\n",
    "parser.add_argument('--n_runs', type=int, default=1, help='Number of runs')\n",
    "parser.add_argument('--drop_out', type=float, default=0.1, help='Dropout probability')\n",
    "parser.add_argument('--gpu', type=int, default=0, help='Idx for the gpu to use')\n",
    "parser.add_argument('--node_dim', type=int, default=100, help='Dimensions of the node embedding')\n",
    "parser.add_argument('--time_dim', type=int, default=100, help='Dimensions of the time embedding')\n",
    "parser.add_argument('--backprop_every', type=int, default=1, help='Every how many batches to '\n",
    "                                                                  'backprop')\n",
    "parser.add_argument('--use_memory', action='store_true',\n",
    "                    help='Whether to augment the model with a node memory')\n",
    "parser.add_argument('--embedding_module', type=str, default=\"graph_attention\", choices=[\n",
    "  \"graph_attention\", \"graph_sum\", \"identity\", \"time\"], help='Type of embedding module')\n",
    "parser.add_argument('--message_function', type=str, default=\"identity\", choices=[\n",
    "  \"mlp\", \"identity\"], help='Type of message function')\n",
    "parser.add_argument('--aggregator', type=str, default=\"last\", help='Type of message '\n",
    "                                                                        'aggregator')\n",
    "parser.add_argument('--memory_update_at_end', action='store_true',\n",
    "                    help='Whether to update memory at the end or at the start of the batch')\n",
    "parser.add_argument('--message_dim', type=int, default=100, help='Dimensions of the messages')\n",
    "parser.add_argument('--memory_dim', type=int, default=172, help='Dimensions of the memory for '\n",
    "                                                                'each user')\n",
    "parser.add_argument('--different_new_nodes', action='store_true',\n",
    "                    help='Whether to use disjoint set of new nodes for train and val')\n",
    "parser.add_argument('--uniform', action='store_true',\n",
    "                    help='take uniform sampling from temporal neighbors')\n",
    "parser.add_argument('--randomize_features', action='store_true',\n",
    "                    help='Whether to randomize node features')\n",
    "parser.add_argument('--use_destination_embedding_in_message', action='store_true',\n",
    "                    help='Whether to use the embedding of the destination node as part of the message')\n",
    "parser.add_argument('--use_source_embedding_in_message', action='store_true',\n",
    "                    help='Whether to use the embedding of the source node as part of the message')\n",
    "parser.add_argument('--n_neg', type=int, default=1)\n",
    "parser.add_argument('--use_validation', action='store_true',\n",
    "                    help='Whether to use a validation set')\n",
    "parser.add_argument('--new_node', action='store_true', help='model new node')\n",
    "\n",
    "try:\n",
    "  args = parser.parse_args(args=[])\n",
    "except:\n",
    "  parser.print_help()\n",
    "  sys.exit(0)\n",
    "\n",
    "BATCH_SIZE = args.bs\n",
    "NUM_NEIGHBORS = args.n_degree\n",
    "NUM_NEG = 1\n",
    "NUM_EPOCH = args.n_epoch\n",
    "NUM_HEADS = args.n_head\n",
    "DROP_OUT = args.drop_out\n",
    "GPU = args.gpu\n",
    "UNIFORM = args.uniform\n",
    "NEW_NODE = args.new_node\n",
    "SEQ_LEN = NUM_NEIGHBORS\n",
    "DATA = args.data\n",
    "NUM_LAYER = args.n_layer\n",
    "LEARNING_RATE = args.lr\n",
    "NODE_LAYER = 1\n",
    "NODE_DIM = args.node_dim\n",
    "TIME_DIM = args.time_dim\n",
    "USE_MEMORY = args.use_memory\n",
    "MESSAGE_DIM = args.message_dim\n",
    "MEMORY_DIM = args.memory_dim\n",
    "\n",
    "Path(\"./saved_models/\").mkdir(parents=True, exist_ok=True)\n",
    "Path(\"./saved_checkpoints/\").mkdir(parents=True, exist_ok=True)\n",
    "MODEL_SAVE_PATH = f'./saved_models/{args.prefix}-{args.data}' + '\\\n",
    "  node-classification.pth'\n",
    "get_checkpoint_path = lambda \\\n",
    "    epoch: f'./saved_checkpoints/{args.prefix}-{args.data}-{epoch}' + '\\\n",
    "  node-classification.pth'\n",
    "\n",
    "### set up logger\n",
    "logging.basicConfig(level=logging.INFO)\n",
    "logger = logging.getLogger()\n",
    "logger.setLevel(logging.DEBUG)\n",
    "fh = logging.FileHandler('log/{}.log'.format(str(time.time())))\n",
    "fh.setLevel(logging.DEBUG)\n",
    "ch = logging.StreamHandler()\n",
    "ch.setLevel(logging.WARN)\n",
    "formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n",
    "fh.setFormatter(formatter)\n",
    "ch.setFormatter(formatter)\n",
    "logger.addHandler(fh)\n",
    "logger.addHandler(ch)\n",
    "logger.info(args)\n",
    "\n",
    "full_data, node_features, edge_features, train_data, val_data, test_data = \\\n",
    "  get_data_node_classification(DATA, use_validation=args.use_validation)\n",
    "\n",
    "max_idx = max(full_data.unique_nodes)\n",
    "\n",
    "train_ngh_finder = get_neighbor_finder(train_data, uniform=UNIFORM, max_node_idx=max_idx)\n",
    "\n",
    "# split and prosess data \n",
    "#train_data.num_nodes = len(train_data.sources)\n",
    "##train_data.x = np.arange(27085528).reshape(157474, 172)\n",
    "##train_data.x = torch.tensor( full_data.x , dtype = torch.float32)\n",
    "#train_data.y = torch.tensor(train_data.labels, dtype = torch.int64)\n",
    "#idx =  len(train_data.edge_idxs)+1  \n",
    "#train_data.edge_idxs = np.arange(idx).reshape(2, int(idx/2))\n",
    "#train_data.edge_idxs = torch.tensor(train_data.edge_idxs , dtype= torch.int64)\n",
    "  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "# Set device\n",
    "device_string = 'cuda:{}'.format(GPU) if torch.cuda.is_available() else 'cpu'\n",
    "device = torch.device(device_string)\n",
    "\n",
    "# Compute time statistics\n",
    "mean_time_shift_src, std_time_shift_src, mean_time_shift_dst, std_time_shift_dst = \\\n",
    "  compute_time_statistics(full_data.sources, full_data.destinations, full_data.timestamps)\n",
    "\n",
    "for i in range(args.n_runs):\n",
    "  results_path = \"results/{}_node_classification_{}.pkl\".format(args.prefix,\n",
    "                                                                i) if i > 0 else \"results/{}_node_classification.pkl\".format(\n",
    "    args.prefix)\n",
    "  Path(\"results/\").mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "  # Initialize Model\n",
    "  tgn = TGN(neighbor_finder=train_ngh_finder, node_features=node_features,\n",
    "            edge_features=edge_features, device=device,\n",
    "            n_layers=NUM_LAYER,\n",
    "            n_heads=NUM_HEADS, dropout=DROP_OUT, use_memory=USE_MEMORY,\n",
    "            message_dimension=MESSAGE_DIM, memory_dimension=MEMORY_DIM,\n",
    "            memory_update_at_start=not args.memory_update_at_end,\n",
    "            embedding_module_type=args.embedding_module,\n",
    "            message_function=args.message_function,\n",
    "            aggregator_type=args.aggregator, n_neighbors=NUM_NEIGHBORS,\n",
    "            mean_time_shift_src=mean_time_shift_src, std_time_shift_src=std_time_shift_src,\n",
    "            mean_time_shift_dst=mean_time_shift_dst, std_time_shift_dst=std_time_shift_dst,\n",
    "            use_destination_embedding_in_message=args.use_destination_embedding_in_message,\n",
    "            use_source_embedding_in_message=args.use_source_embedding_in_message)\n",
    "\n",
    "  tgn = tgn.to(device)\n",
    "\n",
    "  num_instance = len(train_data.sources)\n",
    "  num_batch = math.ceil(num_instance / BATCH_SIZE)\n",
    "  \n",
    "  logger.debug('Num of training instances: {}'.format(num_instance))\n",
    "  logger.debug('Num of batches per epoch: {}'.format(num_batch))\n",
    "\n",
    "  logger.info('Loading saved TGN model')\n",
    "  model_path = f'./saved_models/{args.prefix}-{DATA}.pth'\n",
    "  tgn.load_state_dict(torch.load(model_path))\n",
    "  tgn.eval()\n",
    "  logger.info('TGN models loaded')\n",
    "  logger.info('Start training Mixup node classification task')\n",
    "\n",
    "  decoder =Net(hidden_channels= node_features.shape[1], in_channel = 172, out_channel = 2)\n",
    "  decoder_optimizer = torch.optim.Adam(decoder.parameters(), lr=args.lr)\n",
    "  decoder = decoder.to(device)\n",
    "  decoder_loss_criterion = torch.nn.BCELoss()\n",
    "\n",
    "  val_aucs = []\n",
    "  train_losses = []\n",
    "\n",
    "  early_stopper = EarlyStopMonitor(max_round=args.patience)\n",
    "  for epoch in range(args.n_epoch):\n",
    "    start_epoch = time.time()\n",
    "    \n",
    "    # Initialize memory of the model at each epoch\n",
    "    if USE_MEMORY:\n",
    "      tgn.memory.__init_memory__()\n",
    "\n",
    "    tgn = tgn.eval()\n",
    "    decoder = decoder.train()\n",
    "    loss = 0\n",
    "    \n",
    "    s_idx = 0\n",
    "    e_idx = BATCH_SIZE\n",
    "    sources_batch = train_data.sources[s_idx: e_idx]\n",
    "    \n",
    "    destinations_batch = train_data.destinations[s_idx: e_idx]\n",
    "   \n",
    "    timestamps_batch = train_data.timestamps[s_idx: e_idx]\n",
    "   \n",
    "    edge_idxs_batch = full_data.edge_idxs[s_idx: e_idx]\n",
    "    \n",
    "    labels_batch = train_data.labels[s_idx: e_idx]\n",
    "    \n",
    "    decoder_optimizer.zero_grad()\n",
    "    with torch.no_grad():\n",
    "        source_embedding, destination_embedding, _ = tgn.compute_temporal_embeddings(sources_batch,\n",
    "                                                                                     destinations_batch,\n",
    "                                                                                     destinations_batch,\n",
    "                                                                                     timestamps_batch,\n",
    "                                                                                     edge_idxs_batch,\n",
    "                                                                                     NUM_NEIGHBORS)\n",
    "    node_id = np.arange(source_embedding.shape[0])\n",
    "    \n",
    "    np.random.shuffle(node_id)\n",
    "    x = np.arange(BATCH_SIZE).reshape(2, int(BATCH_SIZE/2))\n",
    "    source_embedding.edge_idxs = torch.tensor( x , dtype= torch.int64)\n",
    "    \n",
    "    source_embedding.train_id = node_id[:int(source_embedding.shape[0] * 0.6)]\n",
    "    source_embedding.val_id = node_id[int(source_embedding.shape[0] * 0.6):int(source_embedding.shape[0] * 0.8)]\n",
    "    source_embedding.test_id = node_id[int(source_embedding.shape[0] * 0.8):]\n",
    "    source_embedding.y = torch.tensor( labels_batch , dtype= torch.int64)\n",
    "    \n",
    "    lam = lam = np.random.beta(4.0, 4.0)\n",
    "    \n",
    "    labels_batch_torch = torch.from_numpy(labels_batch).float().to(device)\n",
    "    \n",
    "    data_b, id_new_value_old = shuffleData(source_embedding)\n",
    "    \n",
    "    pred = decoder(source_embedding, source_embedding.edge_idxs, data_b.edge_idxs, lam , id_new_value_old).sigmoid()\n",
    "        #pred = torch.flatten(pred)\n",
    "    labels_batch_torch = torch.stack((1 - labels_batch_torch, labels_batch_torch), dim=-1)\n",
    "    decoder_loss = decoder_loss_criterion(pred, labels_batch_torch)\n",
    "    decoder_loss.backward()\n",
    "    decoder_optimizer.step()\n",
    "    loss += decoder_loss.item()\n",
    "    train_losses.append(loss / num_batch)\n",
    "\n",
    "    val_auc = eval_node_classification(tgn, decoder, val_data, full_data.edge_idxs, BATCH_SIZE,\n",
    "                                       n_neighbors=NUM_NEIGHBORS)\n",
    "    val_aucs.append(val_auc)\n",
    "\n",
    "    ###########################\n",
    "    pickle.dump({\n",
    "      \"val_aps\": val_aucs,\n",
    "      \"train_losses\": train_losses,\n",
    "      \"epoch_times\": [0.0],\n",
    "      \"new_nodes_val_aps\": [],\n",
    "    }, open(results_path, \"wb\"))\n",
    "\n",
    "    logger.info(f'Epoch {epoch}: train loss: {loss / num_batch}, val auc: {val_auc}, time: {time.time() - start_epoch}')\n",
    "  \n",
    "  if args.use_validation:\n",
    "    if early_stopper.early_stop_check(val_auc):\n",
    "      logger.info('No improvement over {} epochs, stop training'.format(early_stopper.max_round))\n",
    "      break\n",
    "    else:\n",
    "      torch.save(decoder.state_dict(), get_checkpoint_path(epoch))\n",
    "\n",
    "  if args.use_validation:\n",
    "    logger.info(f'Loading the best model at epoch {early_stopper.best_epoch}')\n",
    "    best_model_path = get_checkpoint_path(early_stopper.best_epoch)\n",
    "    decoder.load_state_dict(torch.load(best_model_path))\n",
    "    logger.info(f'Loaded the best model at epoch {early_stopper.best_epoch} for inference')\n",
    "    decoder.eval()\n",
    "\n",
    "    test_auc = eval_node_classification(tgn, decoder, test_data, full_data.edge_idxs, BATCH_SIZE,\n",
    "                                        n_neighbors=NUM_NEIGHBORS)\n",
    "  else:\n",
    "    # If we are not using a validation set, the test performance is just the performance computed\n",
    "    # in the last epoch\n",
    "    test_auc = val_aucs[-1]\n",
    "    \n",
    "  pickle.dump({\n",
    "    \"val_aps\": val_aucs,\n",
    "    \"test_ap\": test_auc,\n",
    "    \"train_losses\": train_losses,\n",
    "    \"epoch_times\": [0.0],\n",
    "    \"new_nodes_val_aps\": [],\n",
    "    \"new_node_test_ap\": 0,\n",
    "  }, open(results_path, \"wb\"))\n",
    "\n",
    "  logger.info(f'test auc: {test_auc}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "52fa3ff4",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib:matplotlib data path: /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data\n",
      "DEBUG:matplotlib:CONFIGDIR=/Users/ghadah/.matplotlib\n",
      "DEBUG:matplotlib:interactive is False\n",
      "DEBUG:matplotlib:platform is darwin\n",
      "DEBUG:matplotlib:CACHEDIR=/Users/ghadah/.matplotlib\n",
      "DEBUG:matplotlib.font_manager:Using fontManager instance from /Users/ghadah/.matplotlib/fontlist-v330.json\n",
      "DEBUG:matplotlib.pyplot:Loaded backend module://matplotlib_inline.backend_inline version unknown.\n",
      "DEBUG:matplotlib.pyplot:Loaded backend module://matplotlib_inline.backend_inline version unknown.\n",
      "DEBUG:matplotlib.font_manager:findfont: Matching sans\\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=10.0.\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf', name='cmb10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf', name='cmmi10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf', name='STIXSizeFiveSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansDisplay.ttf', name='DejaVu Sans Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf', name='cmtt10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Oblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Bold.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf', name='STIXGeneral', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-BoldItalic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf', name='cmss10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf', name='cmex10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 1.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf', name='STIXGeneral', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-BoldOblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 1.335\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf', name='STIXGeneral', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf', name='STIXGeneral', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 0.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 0.33499999999999996\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-BoldOblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf', name='cmsy10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf', name='cmr10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf', name='DejaVu Serif Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizOneSymBol.otf', name='STIXSizeOneSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLinearA-Regular.ttf', name='Noto Sans Linear A', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFNSItalic.ttf', name='System Font', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Khmer Sangam MN.ttf', name='Khmer Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Kohinoor.ttc', name='Kohinoor Devanagari', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoNastaliq.ttc', name='Noto Nastaliq Urdu', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/HelveticaNeue.ttc', name='Helvetica Neue', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizThreeSymReg.otf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFNSMonoItalic.ttf', name='.SF NS Mono', style='italic', variant='normal', weight=295, stretch='normal', size='scalable')) = 11.14975\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXVar.otf', name='STIXVariants', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Verdana Italic.ttf', name='Verdana', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 4.6863636363636365\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Tamil Sangam MN.ttc', name='Tamil Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSerifYezidi-Regular.otf', name='Noto Serif Yezidi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMultani-Regular.ttf', name='Noto Sans Multani', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansKhudawadi-Regular.ttf', name='Noto Sans Khudawadi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/DIN Alternate Bold.ttf', name='DIN Alternate', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Lao Sangam MN.ttf', name='Lao Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Rockwell.ttc', name='Rockwell', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/ChalkboardSE.ttc', name='Chalkboard SE', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBrahmi-Regular.ttf', name='Noto Sans Brahmi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PartyLET-plain.ttf', name='Party LET', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMeeteiMayek-Regular.ttf', name='Noto Sans Meetei Mayek', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Narrow Italic.ttf', name='Arial Narrow', style='italic', variant='normal', weight=400, stretch='condensed', size='scalable')) = 11.25\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Farah.ttc', name='Farah', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Trattatello.ttf', name='Trattatello', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLepcha-Regular.ttf', name='Noto Sans Lepcha', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Menlo.ttc', name='Menlo', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Trebuchet MS.ttf', name='Trebuchet MS', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Italic.ttf', name='Arial', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 7.413636363636363\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Hoefler Text Ornaments.ttf', name='Hoefler Text', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Verdana Bold Italic.ttf', name='Verdana', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 4.971363636363637\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Avenir Next Condensed.ttc', name='Avenir Next Condensed', style='normal', variant='normal', weight=700, stretch='condensed', size='scalable')) = 10.535\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMendeKikakui-Regular.ttf', name='Noto Sans Mende Kikakui', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSylotiNagri-Regular.ttf', name='Noto Sans Syloti Nagri', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bodoni 72.ttc', name='Bodoni 72', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/DevanagariMT.ttc', name='Devanagari MT', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bangla MN.ttc', name='Bangla MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansHanifiRohingya-Regular.ttf', name='Noto Sans Hanifi Rohingya', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Webdings.ttf', name='Webdings', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ZapfDingbats.ttf', name='Zapf Dingbats', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansHanunoo-Regular.ttf', name='Noto Sans Hanunoo', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansUgaritic-Regular.ttf', name='Noto Sans Ugaritic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBamum-Regular.ttf', name='Noto Sans Bamum', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Avenir.ttc', name='Avenir', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Farisi.ttf', name='Farisi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansGothic-Regular.ttf', name='Noto Sans Gothic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansAvestan-Regular.ttf', name='Noto Sans Avestan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W6.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=600, stretch='normal', size='scalable')) = 10.24\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFArabic.ttf', name='.SF Arabic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLycian-Regular.ttf', name='Noto Sans Lycian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/SukhumvitSet.ttc', name='Sukhumvit Set', style='normal', variant='normal', weight=250, stretch='normal', size='scalable')) = 10.1925\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpDReg.otf', name='STIXIntegralsUpD', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntSmReg.otf', name='STIXIntegralsSm', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NewYorkItalic.ttf', name='.New York', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMongolian-Regular.ttf', name='Noto Sans Mongolian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizFiveSymReg.otf', name='STIXSizeFiveSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Monaco.ttf', name='Monaco', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Charter.ttc', name='Charter', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Myanmar Sangam MN.ttc', name='Myanmar Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBhaiksuki-Regular.ttf', name='Noto Sans Bhaiksuki', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Nadeem.ttc', name='Nadeem', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/AppleGothic.ttf', name='AppleGothic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldPermic-Regular.ttf', name='Noto Sans Old Permic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Rounded Bold.ttf', name='Arial Rounded MT Bold', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoSansKannada.ttc', name='Noto Sans Kannada', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansRejang-Regular.ttf', name='Noto Sans Rejang', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFCompactRounded.ttf', name='.SF Compact Rounded', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Damascus.ttc', name='Damascus', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntDReg.otf', name='STIXIntegralsD', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Tahoma Bold.ttf', name='Tahoma', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/MuktaMahee.ttc', name='Mukta Mahee', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Mshtakan.ttc', name='Mshtakan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansAdlam-Regular.ttf', name='Noto Sans Adlam', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizFourSymReg.otf', name='STIXSizeFourSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W2.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=250, stretch='normal', size='scalable')) = 10.1925\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTifinagh-Regular.ttf', name='Noto Sans Tifinagh', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansKhojki-Regular.ttf', name='Noto Sans Khojki', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/InaiMathi-MN.ttc', name='InaiMathi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPauCinHau-Regular.ttf', name='Noto Sans Pau Cin Hau', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Microsoft Sans Serif.ttf', name='Microsoft Sans Serif', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Comic Sans MS.ttf', name='Comic Sans MS', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Times New Roman Italic.ttf', name='Times New Roman', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PTSerifCaption.ttc', name='PT Serif Caption', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bangla Sangam MN.ttc', name='Bangla Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Sinhala Sangam MN.ttc', name='Sinhala Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXVarBol.otf', name='STIXVariants', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSerifAhom-Regular.ttf', name='Noto Serif Ahom', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLimbu-Regular.ttf', name='Noto Sans Limbu', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansEgyptianHieroglyphs-Regular.ttf', name='Noto Sans Egyptian Hieroglyphs', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSiddham-Regular.ttf', name='Noto Sans Siddham', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Braille.ttf', name='Apple Braille', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Palatino.ttc', name='Palatino', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Chalkduster.ttf', name='Chalkduster', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpReg.otf', name='STIXIntegralsUp', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NewPeninimMT.ttc', name='New Peninim MT', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Diwan Kufi.ttc', name='Diwan Kufi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Symbols.ttf', name='Apple Symbols', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/MarkerFelt.ttc', name='Marker Felt', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Black.ttf', name='Arial Black', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial.ttf', name='Arial', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 6.413636363636363\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Georgia Bold.ttf', name='Georgia', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Marion.ttc', name='Marion', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansInscriptionalParthian-Regular.ttf', name='Noto Sans Inscriptional Parthian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXNonUni.otf', name='STIXNonUnicode', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansInscriptionalPahlavi-Regular.ttf', name='Noto Sans Inscriptional Pahlavi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Futura.ttc', name='Futura', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansModi-Regular.ttf', name='Noto Sans Modi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCypriot-Regular.ttf', name='Noto Sans Cypriot', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpSmBol.otf', name='STIXIntegralsUpSm', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Trebuchet MS Bold Italic.ttf', name='Trebuchet MS', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMro-Regular.ttf', name='Noto Sans Mro', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/ITFDevanagari.ttc', name='ITF Devanagari', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bodoni Ornaments.ttf', name='Bodoni Ornaments', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/LucidaGrande.ttc', name='Lucida Grande', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 2.872272727272727\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldTurkic-Regular.ttf', name='Noto Sans Old Turkic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Bold Italic.ttf', name='Arial', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 7.698636363636363\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/BigCaslon.ttf', name='Big Caslon', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMahajani-Regular.ttf', name='Noto Sans Mahajani', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/DecoTypeNaskh.ttc', name='DecoType Naskh', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMiao-Regular.ttf', name='Noto Sans Miao', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansKharoshthi-Regular.ttf', name='Noto Sans Kharoshthi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansYi-Regular.ttf', name='Noto Sans Yi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Verdana Bold.ttf', name='Verdana', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 3.9713636363636367\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Wingdings 2.ttf', name='Wingdings 2', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/KohinoorGujarati.ttc', name='Kohinoor Gujarati', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXNonUniBol.otf', name='STIXNonUnicode', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSharada-Regular.ttf', name='Noto Sans Sharada', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCaucasianAlbanian-Regular.ttf', name='Noto Sans Caucasian Albanian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Thonburi.ttc', name='Thonburi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFNSMono.ttf', name='.SF NS Mono', style='normal', variant='normal', weight=295, stretch='normal', size='scalable')) = 10.14975\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Diwan Thuluth.ttf', name='Diwan Thuluth', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PlantagenetCherokee.ttf', name='Plantagenet Cherokee', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/Library/Fonts/Arial Unicode.ttf', name='Arial Unicode MS', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Avenir Next.ttc', name='Avenir Next', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Songti.ttc', name='Songti SC', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Courier.ttc', name='Courier', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/SnellRoundhand.ttc', name='Snell Roundhand', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Unicode.ttf', name='Arial Unicode MS', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Kokonor.ttf', name='Kokonor', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Comic Sans MS Bold.ttf', name='Comic Sans MS', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/AppleMyungjo.ttf', name='AppleMyungjo', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansChakma-Regular.ttf', name='Noto Sans Chakma', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLinearB-Regular.ttf', name='Noto Sans Linear B', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Academy Engraved LET Fonts.ttf', name='Academy Engraved LET', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/AquaKana.ttc', name='.Aqua Kana', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Times New Roman.ttf', name='Times New Roman', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansWancho-Regular.ttf', name='Noto Sans Wancho', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansNewa-Regular.ttf', name='Noto Sans Newa', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansJavanese-Regular.otf', name='Noto Sans Javanese', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Gujarati Sangam MN.ttc', name='Gujarati Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOlChiki-Regular.ttf', name='Noto Sans Ol Chiki', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Luminari.ttf', name='Luminari', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Sathu.ttf', name='Sathu', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Galvji.ttc', name='Galvji', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldHungarian-Regular.ttf', name='Noto Sans Old Hungarian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Malayalam Sangam MN.ttc', name='Malayalam Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Lao MN.ttc', name='Lao MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Narrow.ttf', name='Arial Narrow', style='normal', variant='normal', weight=400, stretch='condensed', size='scalable')) = 10.25\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NewYork.ttf', name='.New York', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Hoefler Text.ttc', name='Hoefler Text', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTaiLe-Regular.ttf', name='Noto Sans Tai Le', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Myanmar MN.ttc', name='Myanmar MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansManichaean-Regular.ttf', name='Noto Sans Manichaean', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Braille Outline 8 Dot.ttf', name='Apple Braille', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLisu-Regular.ttf', name='Noto Sans Lisu', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBuhid-Regular.ttf', name='Noto Sans Buhid', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Tahoma.ttf', name='Tahoma', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/AmericanTypewriter.ttc', name='American Typewriter', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Beirut.ttc', name='Beirut', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/KufiStandardGK.ttc', name='KufiStandardGK', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoSansArmenian.ttc', name='Noto Sans Armenian', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ArialHB.ttc', name='Arial Hebrew', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXNonUniBolIta.otf', name='STIXNonUnicode', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Mishafi Gold.ttf', name='Mishafi Gold', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSaurashtra-Regular.ttf', name='Noto Sans Saurashtra', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizTwoSymReg.otf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Ayuthaya.ttf', name='Ayuthaya', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Telugu Sangam MN.ttc', name='Telugu Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXGeneralItalic.otf', name='STIXGeneral', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Keyboard.ttf', name='.Keyboard', style='normal', variant='normal', weight=100, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/GujaratiMT.ttc', name='Gujarati MT', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W7.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCham-Regular.ttf', name='Noto Sans Cham', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Baghdad.ttc', name='Baghdad', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/STHeiti Light.ttc', name='Heiti TC', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Gurmukhi.ttf', name='Gurmukhi MT', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizThreeSymBol.otf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Helvetica.ttc', name='Helvetica', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 7.322727272727273\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/STHeiti Medium.ttc', name='Heiti TC', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldPersian-Regular.ttf', name='Noto Sans Old Persian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFCompactItalic.ttf', name='.SF Compact', style='italic', variant='normal', weight=1000, stretch='normal', size='scalable')) = 11.62\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPahawhHmong-Regular.ttf', name='Noto Sans Pahawh Hmong', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Papyrus.ttc', name='Papyrus', style='normal', variant='normal', weight=400, stretch='condensed', size='scalable')) = 10.25\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBuginese-Regular.ttf', name='Noto Sans Buginese', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldItalic-Regular.ttf', name='Noto Sans Old Italic', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntDBol.otf', name='STIXIntegralsD', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Sinhala MN.ttc', name='Sinhala MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansKayahLi-Regular.ttf', name='Noto Sans Kayah Li', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ------------------- Loss ---------------\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Bold.ttf', name='Arial', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 6.698636363636363\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W5.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Baskerville.ttc', name='Baskerville', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMandaic-Regular.ttf', name='Noto Sans Mandaic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMarchen-Regular.ttf', name='Noto Sans Marchen', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Telugu MN.ttc', name='Telugu MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Georgia Italic.ttf', name='Georgia', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTagalog-Regular.ttf', name='Noto Sans Tagalog', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Optima.ttc', name='Optima', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpDBol.otf', name='STIXIntegralsUpD', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSamaritan-Regular.ttf', name='Noto Sans Samaritan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Noteworthy.ttc', name='Noteworthy', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizOneSymReg.otf', name='STIXSizeOneSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Shree714.ttc', name='Shree Devanagari 714', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPhoenician-Regular.ttf', name='Noto Sans Phoenician', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMasaramGondi-Regular.otf', name='Noto Sans Masaram Gondi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/KohinoorBangla.ttc', name='Kohinoor Bangla', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Athelas.ttc', name='Athelas', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Al Nile.ttc', name='Al Nile', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Georgia Bold Italic.ttf', name='Georgia', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansImperialAramaic-Regular.ttf', name='Noto Sans Imperial Aramaic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Al Tarikh.ttc', name='Al Tarikh', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoSansOriya.ttc', name='Noto Sans Oriya', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansElbasan-Regular.ttf', name='Noto Sans Elbasan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFNSRounded.ttf', name='.SF NS Rounded', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Kannada MN.ttc', name='Kannada MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Courier New.ttf', name='Courier New', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/KohinoorTelugu.ttc', name='Kohinoor Telugu', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Braille Pinpoint 8 Dot.ttf', name='Apple Braille', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansGlagolitic-Regular.ttf', name='Noto Sans Glagolitic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Trebuchet MS Bold.ttf', name='Trebuchet MS', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansHatran-Regular.ttf', name='Noto Sans Hatran', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Kailasa.ttc', name='Kailasa', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Gurmukhi MN.ttc', name='Gurmukhi MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Didot.ttc', name='Didot', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFCompact.ttf', name='.SF Compact', style='normal', variant='normal', weight=1000, stretch='normal', size='scalable')) = 10.62\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansGunjalaGondi-Regular.otf', name='Noto Sans Gunjala Gondi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXGeneralBol.otf', name='STIXGeneral', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Hiragino Sans GB.ttc', name='Hiragino Sans GB', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Courier New Bold.ttf', name='Courier New', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansMeroitic-Regular.ttf', name='Noto Sans Meroitic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W0.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=100, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Malayalam MN.ttc', name='Malayalam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Devanagari Sangam MN.ttc', name='Devanagari Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoSansMyanmar.ttc', name='Noto Sans Myanmar', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Herculanum.ttf', name='Herculanum', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/AppleSDGothicNeo.ttc', name='Apple SD Gothic Neo', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Chalkboard.ttc', name='Chalkboard', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Corsiva.ttc', name='Corsiva Hebrew', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Khmer MN.ttc', name='Khmer MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Zapfino.ttf', name='Zapfino', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/GillSans.ttc', name='Gill Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOsmanya-Regular.ttf', name='Noto Sans Osmanya', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBassaVah-Regular.ttf', name='Noto Sans Bassa Vah', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCuneiform-Regular.ttf', name='Noto Sans Cuneiform', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Times New Roman Bold.ttf', name='Times New Roman', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTakri-Regular.ttf', name='Noto Sans Takri', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSundanese-Regular.ttf', name='Noto Sans Sundanese', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Cochin.ttc', name='Cochin', style='normal', variant='normal', weight=500, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Geneva.ttf', name='Geneva', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 4.595454545454545\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Sana.ttc', name='Sana', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Waseem.ttc', name='Waseem', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansThaana-Regular.ttf', name='Noto Sans Thaana', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Braille Outline 6 Dot.ttf', name='Apple Braille', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCoptic-Regular.ttf', name='Noto Sans Coptic', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bodoni 72 OS.ttc', name='Bodoni 72 Oldstyle', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Gurmukhi Sangam MN.ttc', name='Gurmukhi Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Mishafi.ttf', name='Mishafi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansBatak-Regular.ttf', name='Noto Sans Batak', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/NotoSerifMyanmar.ttc', name='Noto Serif Myanmar', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPalmyrene-Regular.ttf', name='Noto Sans Palmyrene', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/GeezaPro.ttc', name='Geeza Pro', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Seravek.ttc', name='Seravek', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PTMono.ttc', name='PT Mono', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Wingdings 3.ttf', name='Wingdings 3', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PTSans.ttc', name='PT Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Oriya MN.ttc', name='Oriya MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSoraSompeng-Regular.ttf', name='Noto Sans Sora Sompeng', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansNabataean-Regular.ttf', name='Noto Sans Nabataean', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Narrow Bold.ttf', name='Arial Narrow', style='normal', variant='normal', weight=700, stretch='condensed', size='scalable')) = 10.535\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Times New Roman Bold Italic.ttf', name='Times New Roman', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Apple Chancery.ttf', name='Apple Chancery', style='normal', variant='normal', weight=0, stretch='normal', size='scalable')) = 10.43\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldNorthArabian-Regular.ttf', name='Noto Sans Old North Arabian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W9.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=900, stretch='normal', size='scalable')) = 10.525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W8.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=800, stretch='normal', size='scalable')) = 10.43\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc', name='Hiragino Mincho ProN', style='normal', variant='normal', weight=300, stretch='normal', size='scalable')) = 10.145\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansWarangCiti-Regular.ttf', name='Noto Sans Warang Citi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPhagsPa-Regular.ttf', name='Noto Sans PhagsPa', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Muna.ttc', name='Muna', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOsage-Regular.ttf', name='Noto Sans Osage', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansLydian-Regular.ttf', name='Noto Sans Lydian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXGeneralBolIta.otf', name='STIXGeneral', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Wingdings.ttf', name='Wingdings', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansNKo-Regular.ttf', name='Noto Sans NKo', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Oriya Sangam MN.ttc', name='Oriya Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSerifBalinese-Regular.ttf', name='Noto Serif Balinese', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bodoni 72 Smallcaps Book.ttf', name='Bodoni 72 Smallcaps', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Bradley Hand Bold.ttf', name='Bradley Hand', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Apple Braille Pinpoint 6 Dot.ttf', name='Apple Braille', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansSyriac-Regular.ttf', name='Noto Sans Syriac', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Savoye LET.ttc', name='Savoye LET', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Verdana.ttf', name='Verdana', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 3.6863636363636365\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Arial Narrow Bold Italic.ttf', name='Arial Narrow', style='italic', variant='normal', weight=700, stretch='condensed', size='scalable')) = 11.535\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXGeneral.otf', name='STIXGeneral', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTaiTham-Regular.ttf', name='Noto Sans Tai Tham', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Skia.ttf', name='Skia', style='normal', variant='normal', weight=5, stretch='normal', size='scalable')) = 10.42525\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansDuployan-Regular.ttf', name='Noto Sans Duployan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/PingFang.ttc', name='PingFang HK', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizTwoSymBol.otf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Impact.ttf', name='Impact', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Silom.ttf', name='Silom', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Brush Script.ttf', name='Brush Script MT', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansOldSouthArabian-Regular.ttf', name='Noto Sans Old South Arabian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansCarian-Regular.ttf', name='Noto Sans Carian', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansPsalterPahlavi-Regular.ttf', name='Noto Sans Psalter Pahlavi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/AlBayan.ttc', name='Al Bayan', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Courier New Italic.ttf', name='Courier New', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ角ゴシック W1.ttc', name='Hiragino Sans', style='normal', variant='normal', weight=200, stretch='normal', size='scalable')) = 10.24\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpBol.otf', name='STIXIntegralsUp', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansVai-Regular.ttf', name='Noto Sans Vai', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Trebuchet MS Italic.ttf', name='Trebuchet MS', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Kefa.ttc', name='Kefa', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Andale Mono.ttf', name='Andale Mono', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Phosphate.ttc', name='Phosphate', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Courier New Bold Italic.ttf', name='Courier New', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/SuperClarendon.ttc', name='Superclarendon', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Georgia.ttf', name='Georgia', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Symbol.ttf', name='Symbol', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntUpSmReg.otf', name='STIXIntegralsUpSm', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Tamil MN.ttc', name='Tamil MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Krungthep.ttf', name='Krungthep', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/PTSerif.ttc', name='PT Serif', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/SFNS.ttf', name='System Font', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXNonUniIta.otf', name='STIXNonUnicode', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/DIN Condensed Bold.ttf', name='DIN Condensed', style='normal', variant='normal', weight=700, stretch='condensed', size='scalable')) = 10.535\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXIntSmBol.otf', name='STIXIntegralsSm', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Raanana.ttc', name='Raanana', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansKaithi-Regular.ttf', name='Noto Sans Kaithi', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Times.ttc', name='Times', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTirhuta-Regular.ttf', name='Noto Sans Tirhuta', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Copperplate.ttc', name='Copperplate', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/STIXSizFourSymBol.otf', name='STIXSizeFourSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTaiViet-Regular.ttf', name='Noto Sans Tai Viet', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/SignPainter.ttc', name='SignPainter', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Iowan Old Style.ttc', name='Iowan Old Style', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansTagbanwa-Regular.ttf', name='Noto Sans Tagbanwa', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc', name='Hiragino Maru Gothic Pro', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/EuphemiaCAS.ttc', name='Euphemia UCAS', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/NotoSansNewTaiLue-Regular.ttf', name='Noto Sans New Tai Lue', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/System/Library/Fonts/Supplemental/Kannada Sangam MN.ttc', name='Kannada Sangam MN', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05\n",
      "DEBUG:matplotlib.font_manager:findfont: Matching sans\\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=10.0 to DejaVu Sans ('/Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf') with score of 0.050000.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     -------------------val_aucs-------------\n"
     ]
    },
    {
     "data": {
      "image/png": "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Duno6DDnnXee2bFjh/n0pz9tVq9ebYzhve2E9evXm6qqqgEfc7K9J2TPSCQSUWNjo2pra9PLPB6PamtrtXv3bhcrG/8OHTqkpqamfm1fXFys6upq2j5H2tvbJUlTp06VJDU2NioajfZr8wsvvFBnnXUWbZ6leDyuzZs3q7OzUzU1NbS1Q1auXKnrrruuX7tKvLed8vbbb2vWrFk655xzdOONN+rw4cOSnG3vMXGivFxra2tTPB5XWVlZv+VlZWV68803XapqYmhqapKkAds+9RiGz7Zt3Xbbbbriiit0ySWXSEq0eSAQUElJSb91afPhe/3111VTU6Oenh4VFhbqySef1MUXX6x9+/bR1jm2efNm7d27Vy+//PIpj/Hezr3q6mo9+uijuuCCC3Ts2DHddddduvLKK/XGG2842t4TMowA49XKlSv1xhtv9NvHi9y74IILtG/fPrW3t+uJJ57Q8uXLtWvXLrfLGneOHDmi1atXa8eOHcrLy3O7nAnh2muvTd+eN2+eqqurdfbZZ+sXv/iF8vPzHfu9E3I3TWlpqbxe7ykjgJubm1VeXu5SVRNDqn1p+9xbtWqVnn76aT377LOaM2dOenl5ebkikYiOHz/eb33afPgCgYDOPfdcLViwQPX19aqqqtIDDzxAW+dYY2OjWlpadNlll8nn88nn82nXrl168MEH5fP5VFZWRns7rKSkROeff74OHjzo6Pt7QoaRQCCgBQsWqKGhIb3Mtm01NDSopqbGxcrGv7lz56q8vLxf24dCIb300ku0/TAZY7Rq1So9+eSTeuaZZzR37tx+jy9YsEB+v79fmx84cECHDx+mzXPEtm2Fw2HaOseuvvpqvf7669q3b1/6snDhQt14443p27S3s06cOKE//elPmjlzprPv76yGv45hmzdvNsFg0Dz66KPmj3/8o/na175mSkpKTFNTk9uljXkdHR3m1VdfNa+++qqRZO6//37z6quvmvfee88YY8y9995rSkpKzL//+7+b1157zXz+8583c+fONd3d3S5XPjbdeuutpri42OzcudMcO3Ysfenq6kqvc8stt5izzjrLPPPMM+aVV14xNTU1pqamxsWqx641a9aYXbt2mUOHDpnXXnvNrFmzxliWZX79618bY2hrp/U9msYY2jvX/vZv/9bs3LnTHDp0yPzud78ztbW1prS01LS0tBhjnGvvCRtGjDHmhz/8oTnrrLNMIBAwixYtMi+++KLbJY0Lzz77rJF0ymX58uXGmMThvXfeeacpKyszwWDQXH311ebAgQPuFj2GDdTWksy//Mu/pNfp7u42f/M3f2OmTJliCgoKzF/91V+ZY8eOuVf0GHbTTTeZs88+2wQCATN9+nRz9dVXp4OIMbS1004OI7R3bi1dutTMnDnTBAIBM3v2bLN06VJz8ODB9ONOtbdljDHZ9a0AAAAM34QcMwIAAEYPwggAAHAVYQQAALiKMAIAAFxFGAEAAK4ijAAAAFcRRgAAgKsIIwAAwFWEEQAA4CrCCAAAcBVhBAAAuIowAgAAXPX/AfwG62uhvYlDAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "print(\"     ------------------- Loss ---------------\")\n",
    "plt.plot(train_losses)\n",
    "plt.show()\n",
    "print(\"     -------------------val_aucs-------------\")\n",
    "plt.plot(val_aucs)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2b7f08e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: seaborn in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (0.12.1)\n",
      "Requirement already satisfied: numpy>=1.17 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from seaborn) (1.23.5)\n",
      "Requirement already satisfied: pandas>=0.25 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from seaborn) (1.5.2)\n",
      "Requirement already satisfied: matplotlib!=3.6.1,>=3.1 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from seaborn) (3.6.2)\n",
      "Requirement already satisfied: pillow>=6.2.0 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (9.3.0)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.0.6)\n",
      "Requirement already satisfied: packaging>=20.0 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (21.3)\n",
      "Requirement already satisfied: pyparsing>=2.2.1 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (3.0.9)\n",
      "Requirement already satisfied: cycler>=0.10 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (0.11.0)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (2.8.2)\n",
      "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.4.4)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (4.38.0)\n",
      "Requirement already satisfied: pytz>=2020.1 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from pandas>=0.25->seaborn) (2022.6)\n",
      "Requirement already satisfied: six>=1.5 in /Users/ghadah/opt/anaconda3/envs/M1Max/lib/python3.8/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.1->seaborn) (1.16.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install seaborn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9024aef4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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6bLLLqvDmavomWee0e23365du3ZpwoQJys/PV0pKimJjY/XKK6/IYrHUK+5NN92k+fPna+3atTpy5EiF43HbvHmz0tLSZLVaNWrUKEll5/rhhx/W/PnzJUnx8fFKTExUTk6ODh8+rLlz5+rrr7/Wm2++WeXcEd6aO3euZ76DyMhIJSYm6tChQ3r22Wd1zjnnVLvfyy+/rP/+97+Syrrsd+3aVfn5+Tp06JAWLVqkRYsW6dlnn9VvfvMbSVLnzp01cOBAbdiwQVLZDaNWrVqpdevWNeZns9k0ceJEffvtt5Kk2NhY9ezZUwcPHvS8zm233abHHnusyv1feeUVTZ06VaGhoerUqZPS09O1fft2bd++XZs3b/bJUy1qc/ToUd1+++3as2ePpLJzERYWpt27d+vTTz/Vl19+qRdffFFXXXWVZ5+cnByNGTNG+/btU2BgoDp27KiAgADt27dPc+bM0VdffaU333yzwg2aadOmafLkyZLKeqr07NlT2dnZWrNmjdasWaNvvvlGH3zwQb2vZQBoSej2DwAwnJSUFE2fPl1z587V999/ryeffFKS9M4772j16tWKjo7W7NmztWTJEn322WdatmyZZs+erdjYWBUWFuqtt97y+rUyMzM1f/58TZo0ST/99JM+//xzrVy50jMz/fvvv6+srCyv482aNUvdu3fX119/rYULF2rBggWaOXOmwsLClJWVpalTp1bYfsqUKVq6dKmioqI0bdo0LVq0SF988YWWLFmiQYMGeQrE+jj33HN1xx13SJJ++uknpaSk6NJLL9WcOXPUvXv3BsVNSEiQy+XSvHnzqtzG3eo/bNgwtWnTRlLZ5H/z589XcHCw/vvf/+r777/XZ599psWLF2v+/PlKTEyU3W7Xa6+9Vu/cDhw4oEmTJslms+n222/XypUr9dlnn2nVqlX685//7JmD4NdWr16t//73vzKbzXr++ee1atUqff7551q0aJEWL17suWnw6quvyul0SpLuueeeCi36jz32mD755JNab1y8+OKL+vbbbxUaGqpXX33V0/Nk1apVeuqpp2S1WvXBBx/ogw8+qHL/qVOn6u6779ZPP/2kL7/8UitWrNBdd90lqWwSxO3bt9f1tNWJw+HQPffcoz179qhLly766quvtHDhQn3++edatWqVRo8erZKSEv3lL3/R5s2bPfu9++672rdvnwYOHKjly5drwYIF+vLLL/X9999rxIgRstlsev755z3b5+Xl6Z///Kck6V//+pdWrFihzz77TEuWLNF7772n4OBgzw0AAEDtKP4BAIZz5ZVXesaIm81mRUVFSZJ++OEHmc1m3XvvverXr1+Fffr16+d5nnpqamqdXm/s2LEaP368p/UwKChIjz/+uEwmk+x2u7Zs2eJ1rICAAL3xxhsVhh4MGDDA0/rtbiWWyoqb999/X1LZEwkGDx7sWRcfH6///Oc/9X50XFFRkV544QVPfLfLLrtMbdu2rVdMN5PJ5Dmeqor/0tJSz0z8p070t2rVKlmtVo0dO7ZSgdytWzfPjYq6vn+neu+991RaWqpzzjlHjz76qKdLuMVi0V133eXJ+9dWrFihgIAAXXbZZbrxxhtlNp/8E6lt27Z64IEHJJXdLHIPVaiPo0ePaubMmZKk5557rsITEywWi3772996XuuNN95QQUFBpRgXX3yxHnroIQUFBXn2e/DBBxUZGSmp4jXWGL755htt375dQUFBeuedd9SzZ0/PulatWun//u//dMEFF8hms1XoheCee+Lyyy+vMPlmeHi4nnjiCZ133nkaNGiQZ06KtLQ0lZSUKDIyskIPAkkaOnSo7rrrLl1++eWnbZgDADR1FP8AAMM566yzqlz+ySefaMuWLbr55purXO+e9d1dPHjr4osvrrQsOjraU6Dk5eV5HSs5ObnKgr1r166SpBMnTniWLV++XKWlpWrfvr2GDRtWaZ/w8PBqi9WaZGZm6uabb9YHH3yggIAAPfHEE+rTp48k6emnn/bM8u9yufTtt9/qyJEjdX6NUaNGyWw2KzU1VTt27KiwbtmyZcrJyVF8fLwuuOACz/KXX35ZW7Zs8cy78Gvu96+0tNTTul5Xy5Yt8+RXFfcNol97+OGHtXXrVv3jH/+ocv2pEyjW9fo61ffffy+73a7Y2NhKBa3buHHjFBAQoBMnTlTZU+GSSy6ptMxisahTp06S6na91seSJUs8eVT3qEj3/Adr1qzxXPPuOQDeffddzZ07t8LPQnx8vN5//30999xznnOdkJAgq9Wq3NxcPfrooxUmrpSkP/3pT3rttdc0YsQInx4fADRXjPkHABhOTa3dAQEBys3N1aZNm7R3714dOHBAe/fu1fbt2z2Ptqtr4RgfH1/lcncR4nA4fBbLbrd7lu3cuVOSqpzkzC05Odnr13Z78MEH9csvvyguLk7vv/++unfvruHDh+umm27S8ePHde+99+qzzz7T0aNHde+990oq66bfq1cvr1+jXbt2Ou+887Ry5UrNmzevwjG4J8G74YYbKo3FtlgsKikp0fr167Vnzx7P+/fLL79UuAnhdDortL57o7i42BMjMTGxym169uwpk8kkl8tVaZ3JZJLJZNK6deu0a9cuHThwQPv379eOHTu0b9++CrnVl3uMfK9evao9vtDQUHXp0kWpqalKS0urdHPKl9drfaSlpUmS54ZSVdzrHA6H9u3bp+TkZP3hD3/QN998o4yMDD3yyCOyWq3q27evzjvvPF144YU688wzK0yu2bp1a91xxx1666239OWXX+rLL79UbGyszj33XA0dOlQXXnihTx7fCQAtBcU/AMBwTm1lPVV+fr4mT56sefPmyWazeZYHBASoT58+6tWrl1asWFHn16ut23BVhWJ9Y50qOztbUlmxV51WrVp5HU+S1q5d62ktnjx5smdsf7t27fT6669r/PjxOnr0qO6//37PujPOOKNOhb/bTTfdpJUrV2rBggX685//LJPJpKysLK1YsUImk0k33XRThe3d3cA/+uijCq3nFotFPXr0UL9+/Wp9fGBNcnNzPd9Xd04DAwMVEhKiwsLCCstdLpfee+89vf322xVazk0mk7p06aLrrrtOX331Vb1zc8vPz5dU1qujJu73vapu/768XuvDm2M49bp1H0O7du301Vdf6e2339Y333yjY8eOaePGjdq4caOmTJmiDh066PHHH9fw4cM9+06cOFHJycmaMWOG1q1bp4yMDM2bN0/z5s2T1WrVVVddpaeeeqrW8wkAoPgHADQhEyZM0OrVqxUcHKxx48bpzDPPVGJiojp16qSAgADNmjWrXsW/v7i7ubuLqapUVfzVZNOmTZLKCrNfP9Zu4MCB+tvf/qbHH39c69ev1/r16yXJM3t9XV166aWKiorS4cOHtW7dOg0aNEjz58+XzWbTkCFDKnUJf+qpp/T555/LYrHoN7/5jQYNGqTExER17txZwcHBWrVqVYOKf/fcEFL159Tlcqm0tLTS8ilTpuj111+XJF111VW68MIL1b17d3Xt2lVhYWHau3evT4r/sLAwSRWHf1TFfQPCvb2ReHMMp95AOfUYWrdurccff1yPP/64duzYoTVr1uinn37SypUrdejQId1///2aOXNmhTk9LrvsMl122WXKz8/3zPK/fPly7dmzxzN8oC6TfAJAS0XxDwBoEjZt2uR5xN/bb7+tc889t9I2R48ePd1pNUiPHj0k1TzB3a/HOdfG3SpcXFys0tLSSs9Av/HGG5WamuqZSb5169a69dZb6/QaboGBgRo5cqSmTZumBQsWaNCgQVqwYIGkihP9SdKxY8c8wwGee+453XjjjZXiNfT9CwoKUocOHXTo0CFt37690qSQUlm3+1OHXkhlPRLee+89SWXjyO+//36f5+bmnvth+/bt1Q5tyM/P1969eyXJM47fSLp27aqff/5Z27Ztq3Yb97wSJpNJHTt2lFR2DaSlpal///4KDg5WUlKSkpKSdOutt+r48eMaM2aMDh06pPnz56tfv34qLi72nIeePXuqVatWuuSSS3TJJZfo0Ucf1X//+1+9/PLLWrp0qU6cOEHrPwDUggn/AABNwsGDBz3fVzUOvqioyFN4NvaYZ18ZNmyYAgICdOTIEa1cubLS+pKSEs8j87w1cOBASWUFbXX7njrbf1ZWlmcCt/pwd+3/7rvvdOjQIW3evFlRUVG67LLLKmx3+PBhT3f0qsaKO51Off75557/ru976J787dNPP60yxuzZsysty87O9gwDqG4c+6n7/frmgXucujfd7S+88EJZrVZlZGR4nojwazNmzJDdbldISIjnEYNG4p6DYMmSJTpw4ECV20ybNk2S1L9/f0VERMhut+v666/X7373O8+kjKdq06aN52aYe06FTz/9VNddd50eeeSRKs/teeed5/m+qfzMA4A/UfwDAJoEd4upVNZF+9Qx/7t27dKdd97paSUsKio63enVS5s2bTR27FhJ0qOPPlrhEW3Z2dl68MEHK9z08Ea/fv08j9H7xz/+obVr13rWZWVl6f/+7//04osvSiprVXa5XPrLX/5SbSFam6SkJCUnJysjI0N///vf5XK5dO2111bqcdCpUyfP5H/vvPNOhffo8OHDeuCBB7Ru3TrPsvq+h3/4wx8UGRmpbdu26bHHHvN0/3e5XPr44489RempYmJiPEMGPvjgA+Xk5HjWZWVl6ZlnntH8+fM9y3492797foHDhw/Xml+7du00ZswYSdKTTz5Z4Rn1TqdTH3/8sWf4wYQJE05ba3ZRUZGysrJq/OceLnHFFVcoKSlJJSUluvPOOyv0TsnPz9eTTz6plStXymq16uGHH5YkWa1WXX311ZLK5qL49eMzFy1a5LkB5h6ucuWVVyogIECpqal6/vnnK8zTkJWV5XmM4JlnnllhyAcAoGp0+wcANAm9e/fWlVdeqf/973+aOnWqPv/8cyUkJCgnJ8dTIJ9//vlatWqVCgoKlJ+fX+fJ8vzhoYce0vbt27VmzRrdcsst6ty5s8LCwrRz507Z7XYlJycrJSWl0qz5NXnppZd05513auvWrRo3bpxnTP2ePXtUWlqqkJAQPfXUU7r88sv1+9//Xps2bdLEiRMVHh5e4dF83rrpppuUkpLiKWR/3eVfKiuwb7/9dr377ruaP3++li1bpk6dOqmgoED79u2Ty+XS4MGDtX79etntdh09erReBV1sbKxeffVV3Xvvvfrqq6/07bffqlu3bjp69KgyMjJ0ySWXaPny5RVaiq1Wqx544AH97W9/05o1azRs2DB17txZpaWl2rdvn+x2u3r37q0jR44oOztbR48erdBDoHfv3lq7dq2effZZffLJJxo7dmylyQ5P9dhjj+nYsWNavHixHnjgAcXFxalt27Y6cOCAZxLIcePG6c4776zz8dfXe++95xn6UJ0pU6Zo+PDhslqtevPNN3XnnXdqz549uu666zzX7e7du1VcXKzg4GD97W9/09lnn+3Zf+LEiVq/fr1+/vlnjR49Wh06dFB0dLTS09OVnp4uqexRjO7iPy4uTs8//7weeeQRTZs2TXPmzFHHjh3lcDi0f/9+lZSUKDo6WpMnT268EwMAzQgt/wCAJuPll1/Wc889p759+8rlcmnHjh0qLS3VxRdfrLfffltTp05V+/btJalBXdlPp+DgYE2dOlWPPvqoevfurfT0dO3du1dnn322PvzwQ0839uqegFCV6Ohoffzxx5o0aZLOPPNMZWRkKC0tTe3bt9dtt92mr7/+WqNGjVJYWJjee+89XXHFFbruuus0dOjQeh3DNddc48mvX79+1T668JFHHtGrr76qs846S4GBgdqxY4dOnDihIUOG6B//+Ic+/PBDDRgwQJK0dOnSeuUiSUOGDNEXX3yh3/zmN4qOjtaOHTsUEhKi++67T6+99lqV+4wdO1YffPCBzj//fIWHh2vnzp3KzMzUmWeeqaeeekqzZs3y9Kj4dW7PP/+8zj//fFmt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1I+7+I+i+AcAAACA06JOxf/w4cPldDr17LPPemZDzM3N1QcffCBJCgsL0yWXXFJpv/z8fL388ssymUy64IILGp41mrTc0rLiP4LiHwAAAABOizqN+b/xxhs1depUfffdd7r88svVq1cvbd68WZmZmTKZTLrnnnsUEhLi2b60tFQ//vij/vWvf2nPnj1q166drrvuOp8fBJoWWv4BAAAA4PSqU/EfEBCgd999V3feeaf27dunw4cPe9Zde+21+sMf/lBh+xEjRujYsWNyuVwKCQnRiy++yIR/UN4pE/4BAAAAABpfnYp/SerYsaPmz5+v//3vf9q6dasCAgJ0wQUXVPl4v4iICB09elQDBgzQY489pn79+vkkaTRttPwDAAAAwOlV5+JfKusBMHLkSI0cObLG7V588UVFREQoISGhXsmheXKP+aflHwAAAABOj3oV/97q3bt3Y4ZHE2Rz2lVgK5RE8Q8AAAAAp4tPiv+srCylpqYqKytLkhQdHa2kpCTFxMT4IjyakbzyLv9Wk0VhAaF+zgYAAAAAWoYGFf9z587VjBkzlJKSIpfLVWl9nz59NG7cOF1//fUNeRk0I7nlk/1FBEXIZDL5ORsAAAAALYHL5Wrx9Ye5PjtlZmbq7rvv1l//+ldt2bJFTqdTLper0r+UlBQ99thjuuOOO5SZmenr3NEEuSf7iwykyz8AAABwujzyyAMaOvRsPffcU15tv3z5Ug0derZGj76uyobe6mzYsE5Dh56t224b61l25MhhDR16tq64YpjXcd57720NHXq2Xn31Za/3qc6PP67Un/98X4Vl9cmpqatzy39BQYHGjx+vPXv2yOVyqX///hoxYoR69eqlNm3ayGKxKDs7W9u3b9d3332nn376SatWrdLYsWP1+eefKywsrDGOA03Eycn+wv2cCQAAANByXHvtDfrxx1X6/vulKioqUkhISI3bL1gwt3y/65p0i/nu3bv0yCMPqm3bdv5Oxe/qXPw//vjj2r17t+Li4vTss89q2LBhVW531llnady4cVq7dq0eeeQR7d+/X0899ZRefrnhd27QdHla/pnsDwAAADhtzjtvqNq0idXx4xlavnyJrrji6mq3zcw8rtWrf5DFYtHVV9f8hDdvxMbG6aOP5shsrlfH8wZxOh1VLvdnTv5SpyPduHGjFi5cqIiICL3//vvVFv6nGjRo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OiRo4MBBWr9+jdas+UlDhpyvQ4cOatOmDWrfvmyiP6msjnv66ce1dOl3MplM6tYtURdddIk6deqsnj1769Chg3r55RcbmE3Vhbq7aD5VdnaW7rvvbu3dm6bAwCD17NlLZ599jjp16qK+fftpzpxPa32MYY2ZeHHPwOksK+IDAipeT02hcbNOxf/111+vN998U+vWrdOzzz6rJ598staDtNvteuqpp7R27Vq1b99eI0eObFDCaLpyylv+I5nsDwAAAE2U2WTW6MSReiel+sbQmxJHGrbwdxs58gatX79GCxd+rSFDztc33yyQy+XStdde76nxvv32Gy1d+p3i4uL1z3++pq5dKz7ufebMGfV+/djYOEnydNX/tYyMjErL3n57ivbuTdNZZ52j55570fNIP7f8/BP1zkeS2rQpG+pw+PCharc5dKhsAvuYmJgGvZY/1OmKDAwM1P/93//JbDbrk08+0c0336xFixapoKCg0rYlJSVauHChRo8erS+++EJBQUF65ZVXPLMlouVxP+aPyf4AAADQlPWP66s7k29VVFBkheXRQZG6M/lW9Y/r66fMvHfhhcMUFRWtVatWqKSkRN99t1BWq1VXX32ysXbr1s2SpEsvHVGp8Jekn376QdLJ1vC6OOeccyVJy5cvqXL9qlXfV1rmzuc3vxlbqfAvLCzQ1q1bqsjH+xb5AQPOkiQtXvxtlce0ffs2HTp0UK1atVJSUi+v4xpFnVr+JWno0KGaPHmynnrqKW3evFkPPPCAzGazOnTooKioKAUEBCg3N1f79u2T3W6Xy+VSSEiInn/+efXr168xjgFNhHvCvwi6/QMAAKCJ6x/XV/1i+2hXTprySvIUERSh7lFdDN/i7xYQEKArr7xGn3wyXTNmfKADB/Zr2LBLFBPT2rNNZGSUJGnNmp/0hz/creDgstntbTab3n33La1bVzZpX2lpaZ1ff8iQoerUqbO2b/9Zb789RXfe+UfPJHsfffShNm/eWGkfdz4rVizXkCHne3ooZGdn67nnnlJeXm6lfIKCgiRJBQUFcjqdVU7k53bJJZfpnXf+o127UvXaay/r3nsnymotK5kPHTqo554re4LDyJGjFBjom2Ekp1Odi3+prPt/YmKi/v73v2v16tVyOBzav3+/9u/fX2nbwYMH67nnnlPHjh0bnCyattxSWv4BAADQfJhNZvWI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sBBffPEFMjMz0a5dO3To0EFthr+/P6ytrZGQkICVK1cqF6wTBAHLli3DpUuX0KhRI3Tr1q3KWhSr62u7wj9Qdqt+QEAAACAsLAxXrlxRjpWWluL7779HQkICbGxsKr3Crzw/Pz9IJBL8+OOPFd4McPv2bQQHB0MQBIwbN+6lnssfPnw4jIyMEB4eXuFNArdu3cLs2bMBAOPHj9c6l4iIiIjobcDb/um1yc/Px7p16wCUPZe9atUqtZ/t168fOnfurHJs9OjROH/+POLi4tCnTx/4+PjA1NQUFy9eRG5uLlxcXLBixQq1t6/XpJEjRyIpKQm//fYbBg0ahNatW8POzg7nzp3D/fv34ebmhiVLllSZ4eTkhMWLF2Py5MlYunQpoqOjIZVKceXKFWRmZsLW1haLFi1SPs6gTlZWFgCovN1ejEmTJiE1NRVxcXHo168f2rRpAxsbG6SmpiI7OxsWFhb47rvvYGdnpzbD29sbY8aMwZo1a9C3b1/4+voCAE6fPo2ioiIMGDAAI0eOfKn6PD09MW3aNCxcuBABAQFo164dTE1Ncfr0aRQUFMDf3x89e/Z8qWwiIiIiIn3H5p9emzNnziift8/IyEBGRobaz3p5ealt/o2NjbFixQrs2LEDO3fuxO+//w65XI6GDRsiICAAn3zyCaysrF7FLlRiZGSE77//HlFRUYiKikJycjJKS0vh4uKCgIAAjBo1StRV7vfffx979uzBypUrkZCQgCNHjqB27doYOnQoxo0bJ2qBvLy8PADar6SvYGxsjPDwcERHRyM6OhqpqakoKiqCk5MThg4dirFjx6Jhw4Yac4KDg+Hi4oKIiAicOnUKlpaWaNmyJQICAvDRRx+pff2iGGPGjIGrqyt+/PFH/P7775BIJHB3d0dgYCD69ev30rlERERERPpOIvCl2ERERERERER6jc/8ExEREREREek5Nv9EREREREREeo7NPxEREREREZGeY/NPREREREREpOfY/BMRERERERHpOTb/RERERERERHqOzT8RERERERGRnmPzT0RERERERKTnjN50AURERPRmeXh4aPV5KysrnD179hVVU/Oio6MREhKCOnXq4NixY2+6HCIiojeCzT8REREBABo3bgx7e3uNn7O0tHwN1RAREVFNYvNPREREAIBx48Zh4MCBb7oMIiIiegX4zD8RERERERGR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\n",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "# Use plot styling from seaborn.\n",
    "sns.set(style='darkgrid')\n",
    "\n",
    "# Increase the plot size and font size.\n",
    "sns.set(font_scale=1.5)\n",
    "plt.rcParams[\"figure.figsize\"] = (12,6)\n",
    "\n",
    "# Plot the learning curve.\n",
    "plt.plot(train_losses, 'b-o', label=\"Training\")\n",
    "\n",
    "plt.plot(val_aucs, 'g-o', label=\"Validation\")\n",
    "\n",
    "\n",
    "# Label the plot.\n",
    "plt.title(\"Training & Validation Loss\")\n",
    "plt.xlabel(\"Epoch\")\n",
    "plt.ylabel(\"LOSS\")\n",
    "plt.legend()\n",
    "plt.xticks([1, 2, 3, 4, 5, 6, 7,8,9,10])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "04df63cb",
   "metadata": {},
   "outputs": [],
   "source": [
    "p = torch.flatten(pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "04627c04",
   "metadata": {},
   "outputs": [],
   "source": [
    "labels_batch_torch2 = torch.flatten(labels_batch_torch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8e14913c",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'labels_batch_torch1' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn [11], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mlabels_batch_torch1\u001b[49m\u001b[38;5;241m.\u001b[39mravel()\n",
      "\u001b[0;31mNameError\u001b[0m: name 'labels_batch_torch1' is not defined"
     ]
    }
   ],
   "source": [
    "labels_batch_torch1.ravel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2ce36652",
   "metadata": {},
   "outputs": [],
   "source": [
    "confusion_matrix(y_true, (y_pred > 0.5))\n",
    "labels_batch_torch1 = labels_batch_torch1.detach().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7f5c62e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "#p = p.detach().numpy()\n",
    "p.ravel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1afedbaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "cm = confusion_matrix(labels_batch_torch1, p > 0.1)\n",
    "cm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8430e0e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "TP = 938\n",
    "FN = 62\n",
    "FP = 1\n",
    "TN = 999"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "134fcdcc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9685"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Acc= (TP + TN )/ (TP + FN + FP +TN)\n",
    "Acc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "395f7f57",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9989350372736954"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#What proportion of positive identifications was actually correct?\n",
    "Pre = TP/(TP+FP)\n",
    "Pre"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "496a1067",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.938"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# What proportion of actual positives was identified correctly?\n",
    "Recall=  TP/(TP+FN)\n",
    "Recall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05103fbc",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
